/*
 * MsjEmisor.cpp
 *
 *  Created on: 09/01/2010
 *      Author: San Martín, Matías I.
 */

#include "MsjEmisor.h"
#include "../../Framework/Excepciones/InicializacionExcepcion.h"
#include "../Comunicaciones/TraductorDirecciones.h"

using namespace middleware;

using middleware::comunicaciones::TraductorDireccionesSingleton;

MsjEmisor::MsjEmisor()
	: _emisor(NULL)
{
}

MsjEmisor::~MsjEmisor() {
}

void MsjEmisor::inicializar(MiddlewareIO* emisor)
{
	if (!emisor)
		throw new InicializacionExcepcion("El emisor indicado es NULL");

	_emisor = emisor;
}

int MsjEmisor::enviar(const IdPlaneta& idPlaneta, const middleware::Mensaje& mensaje)
{
	Direccion destino = TraductorDireccionesSingleton::instance().getDireccion(idPlaneta);

	return this->enviar(destino,mensaje);
}

int MsjEmisor::enviar(const IdJuego& idJuego, const middleware::Mensaje& mensaje)
{
	Direccion destino = TraductorDireccionesSingleton::instance().getDireccion(idJuego);
	return this->enviar(destino,mensaje);
}

int MsjEmisor::enviar(const Direccion& destino,const middleware::Mensaje& mensaje)
{
	char* msj = new char[mensaje.getTamanio()];
	size_t tam = mensaje.saveToArray(reinterpret_cast<uint8_t*>(msj));

	int ret = _emisor->sendMulticast(msj,tam,destino)? 0:-1;
	delete [] msj;

	return ret;
}
